summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_setup.s4
-rw-r--r--asm/dodrio_berry_picking.s4
-rw-r--r--asm/event_data.s6
-rw-r--r--asm/evolution_scene.s4
-rw-r--r--asm/hall_of_fame.s4
-rw-r--r--asm/main_menu.s1853
-rw-r--r--asm/mon_markings.s2
-rw-r--r--asm/option_menu.s8
-rw-r--r--asm/trade.s6
-rw-r--r--baserom.ipsbin1991957 -> 1991829 bytes
-rw-r--r--berry_fix/payload/include/global.h2
-rw-r--r--common_syms/help_system.txt1
-rw-r--r--data/data.s36
-rw-r--r--data/main_menu/unk_8234648.pal19
-rw-r--r--data/main_menu/unk_8234668.pal19
-rw-r--r--data/specials.inc4
-rw-r--r--data/strings.s38
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/constants/global.h2
-rw-r--r--include/constants/songs.h2
-rw-r--r--include/event_data.h2
-rw-r--r--include/help_system.h6
-rw-r--r--include/link.h1
-rw-r--r--include/main_menu.h2
-rw-r--r--include/mystery_gift_menu.h1
-rw-r--r--include/quest_log.h1
-rw-r--r--include/strings.h90
-rw-r--r--include/text_window_graphics.h2
-rw-r--r--ld_script.txt3
-rw-r--r--src/berry_fix_program.c2
-rw-r--r--src/daycare.c6
-rw-r--r--src/help_system.c8
-rw-r--r--src/help_system_812B1E0.c8
-rw-r--r--src/link.c4
-rw-r--r--src/main.c3
-rw-r--r--src/main_menu.c795
-rw-r--r--src/menews_jisan.c2
-rw-r--r--src/mevent.c2
-rw-r--r--src/mystery_gift_menu.c68
-rw-r--r--src/new_game.c2
-rw-r--r--src/quest_log.c18
-rw-r--r--src/seagallop.c4
-rw-r--r--src/text_window_graphics.c2
-rw-r--r--src/title_screen.c6
-rw-r--r--sym_common.txt6
45 files changed, 1019 insertions, 2041 deletions
diff --git a/asm/battle_setup.s b/asm/battle_setup.s
index c5b4510b7..5a9797056 100644
--- a/asm/battle_setup.s
+++ b/asm/battle_setup.s
@@ -28,7 +28,7 @@ _0807F644:
bl FldEffPoison_IsActive
cmp r0, 0
bne _0807F686
- bl sub_812B478
+ bl HelpSystem_Disable
ldrb r0, [r4, 0x2]
bl BT_StartOnField
ldrh r0, [r4]
@@ -41,7 +41,7 @@ _0807F65E:
lsrs r0, 24
cmp r0, 0x1
bne _0807F686
- bl sub_812B484
+ bl HelpSystem_Enable
bl CleanupOverworldWindowsAndTilemaps
ldr r0, _0807F68C @ =sub_800FD9C
bl SetMainCallback2
diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s
index 32b47791b..c9dd68e4b 100644
--- a/asm/dodrio_berry_picking.s
+++ b/asm/dodrio_berry_picking.s
@@ -8327,7 +8327,7 @@ sub_81546EC: @ 81546EC
lsls r4, 24
lsrs r4, 24
adds r0, r4, 0
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r1, [r0]
movs r2, 0x90
lsls r2, 1
@@ -8335,7 +8335,7 @@ sub_81546EC: @ 81546EC
movs r3, 0x1
bl LoadBgTiles
adds r0, r4, 0
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r0, [r0, 0x4]
movs r1, 0xA0
movs r2, 0x20
diff --git a/asm/event_data.s b/asm/event_data.s
index 4c7c7c828..f4aa51496 100644
--- a/asm/event_data.s
+++ b/asm/event_data.s
@@ -248,8 +248,8 @@ sub_806E2AC: @ 806E2AC
_0806E2B8: .4byte 0x00000839
thumb_func_end sub_806E2AC
- thumb_func_start sub_806E2BC
-sub_806E2BC: @ 806E2BC
+ thumb_func_start Flag_0x839_IsSet
+Flag_0x839_IsSet: @ 806E2BC
push {lr}
ldr r0, _0806E2CC @ =0x00000839
bl FlagGet
@@ -259,7 +259,7 @@ sub_806E2BC: @ 806E2BC
bx r1
.align 2, 0
_0806E2CC: .4byte 0x00000839
- thumb_func_end sub_806E2BC
+ thumb_func_end Flag_0x839_IsSet
thumb_func_start sub_806E2D0
sub_806E2D0: @ 806E2D0
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index 1ffe9b0db..d8651a24c 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -388,7 +388,7 @@ EvolutionScene: @ 80CDDF4
ldr r0, _080CE0E0 @ =sub_80D0050
bl SetVBlankCallback
bl m4aMPlayAllStop
- bl sub_812B478
+ bl HelpSystem_Disable
ldr r0, _080CE0E4 @ =sub_80CE710
bl SetMainCallback2
add sp, 0x24
@@ -1852,7 +1852,7 @@ _080CEDB8:
beq _080CEDC6
b _080CF528
_080CEDC6:
- bl sub_812B484
+ bl HelpSystem_Enable
ldr r1, _080CEE20 @ =gTasks
mov r2, r8
adds r0, r2, r7
diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s
index 75475b667..ce675d88e 100644
--- a/asm/hall_of_fame.s
+++ b/asm/hall_of_fame.s
@@ -56,7 +56,7 @@ _080F1E04:
.4byte _080F1E88
.4byte _080F1EC4
_080F1E18:
- ldr r1, _080F1E40 @ =gUnknown_3005ECC
+ ldr r1, _080F1E40 @ =gHelpSystemEnabled
movs r0, 0
strb r0, [r1]
movs r0, 0
@@ -74,7 +74,7 @@ _080F1E18:
strb r1, [r0]
b _080F1EF0
.align 2, 0
-_080F1E40: .4byte gUnknown_3005ECC
+_080F1E40: .4byte gHelpSystemEnabled
_080F1E44: .4byte gUnknown_203AB3C
_080F1E48: .4byte 0x00002008
_080F1E4C: .4byte gMain
diff --git a/asm/main_menu.s b/asm/main_menu.s
deleted file mode 100644
index 76c9f8838..000000000
--- a/asm/main_menu.s
+++ /dev/null
@@ -1,1853 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_800C2D4
-sub_800C2D4: @ 800C2D4
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_800C2D4
-
- thumb_func_start sub_800C2EC
-sub_800C2EC: @ 800C2EC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_800C2EC
-
- thumb_func_start sub_800C300
-sub_800C300: @ 800C300
- push {lr}
- movs r0, 0x1
- bl sub_800C318
- pop {r0}
- bx r0
- thumb_func_end sub_800C300
-
- thumb_func_start sub_800C30C
-sub_800C30C: @ 800C30C
- push {lr}
- movs r0, 0x1
- bl sub_800C318
- pop {r0}
- bx r0
- thumb_func_end sub_800C30C
-
- thumb_func_start sub_800C318
-sub_800C318: @ 800C318
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0800C4A0 @ =0x040000d4
- mov r0, sp
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _0800C4A4 @ =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r5, 0
- str r5, [sp, 0x4]
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _0800C4A8 @ =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, sp
- strh r5, [r0]
- str r0, [r1]
- ldr r0, _0800C4AC @ =0x05000002
- str r0, [r1, 0x4]
- ldr r0, _0800C4B0 @ =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetPaletteFade
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _0800C4B4 @ =gUnknown_8234690
- movs r0, 0
- movs r2, 0x1
- bl InitBgsFromTemplates
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r0, _0800C4B8 @ =gUnknown_8234618
- bl InitWindows
- bl DeactivateAllTextPrinters
- ldr r0, _0800C4BC @ =gUnknown_8234648
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0800C4C0 @ =gUnknown_8234668
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r0, _0800C4C4 @ =sub_800C2D4
- bl SetMainCallback2
- movs r1, 0xC1
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- ldr r0, _0800C4C8 @ =sub_800C4D0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0800C4CC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r5, [r1, 0xA]
- strh r4, [r1, 0x18]
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0800C4A0: .4byte 0x040000d4
-_0800C4A4: .4byte 0x8100c000
-_0800C4A8: .4byte 0x85000100
-_0800C4AC: .4byte 0x05000002
-_0800C4B0: .4byte 0x810001ff
-_0800C4B4: .4byte gUnknown_8234690
-_0800C4B8: .4byte gUnknown_8234618
-_0800C4BC: .4byte gUnknown_8234648
-_0800C4C0: .4byte gUnknown_8234668
-_0800C4C4: .4byte sub_800C2D4
-_0800C4C8: .4byte sub_800C4D0
-_0800C4CC: .4byte gTasks
- thumb_func_end sub_800C318
-
- thumb_func_start sub_800C4D0
-sub_800C4D0: @ 800C4D0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0800C538 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _0800C4E8
- b _0800C626
-_0800C4E8:
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x1
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x21
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xFF
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x7
- bl SetGpuReg
- ldr r0, _0800C53C @ =gSaveFileStatus
- ldrh r4, [r0]
- cmp r4, 0x2
- beq _0800C58C
- cmp r4, 0x2
- bgt _0800C540
- cmp r4, 0
- beq _0800C5E8
- cmp r4, 0x1
- beq _0800C54A
- b _0800C5E8
- .align 2, 0
-_0800C538: .4byte gPaletteFade
-_0800C53C: .4byte gSaveFileStatus
-_0800C540:
- cmp r4, 0x4
- beq _0800C60C
- cmp r4, 0xFF
- beq _0800C5B0
- b _0800C5E8
-_0800C54A:
- movs r0, 0
- bl sub_800D044
- bl sub_806E2BC
- cmp r0, 0x1
- bne _0800C570
- ldr r2, _0800C56C @ =gTasks
- lsls r3, r5, 2
- adds r0, r3, r5
- lsls r0, 3
- adds r0, r2
- movs r1, 0x2
- strh r1, [r0, 0x8]
- adds r1, r2, 0
- adds r2, r3, 0
- b _0800C57E
- .align 2, 0
-_0800C56C: .4byte gTasks
-_0800C570:
- ldr r0, _0800C588 @ =gTasks
- lsls r2, r5, 2
- adds r1, r2, r5
- lsls r1, 3
- adds r1, r0
- strh r4, [r1, 0x8]
- adds r1, r0, 0
-_0800C57E:
- adds r0, r2, r5
- lsls r0, 3
- adds r0, r1
- b _0800C5FC
- .align 2, 0
-_0800C588: .4byte gTasks
-_0800C58C:
- movs r0, 0
- bl sub_800D094
- ldr r0, _0800C5A8 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- strh r6, [r1, 0x8]
- ldr r1, _0800C5AC @ =gUnknown_8415C42
- adds r0, r5, 0
- bl sub_800C634
- b _0800C626
- .align 2, 0
-_0800C5A8: .4byte gTasks
-_0800C5AC: .4byte gUnknown_8415C42
-_0800C5B0:
- movs r0, 0
- bl sub_800D094
- ldr r1, _0800C5DC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r6, 0x1
- strh r6, [r4, 0x8]
- ldr r1, _0800C5E0 @ =gUnknown_8415BFF
- adds r0, r5, 0
- bl sub_800C634
- bl sub_806E2BC
- cmp r0, 0x1
- bne _0800C5E4
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _0800C626
- .align 2, 0
-_0800C5DC: .4byte gTasks
-_0800C5E0: .4byte gUnknown_8415BFF
-_0800C5E4:
- strh r6, [r4, 0x8]
- b _0800C626
-_0800C5E8:
- movs r0, 0
- bl sub_800D044
- ldr r1, _0800C604 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x8]
-_0800C5FC:
- ldr r1, _0800C608 @ =sub_800C704
- str r1, [r0]
- b _0800C626
- .align 2, 0
-_0800C604: .4byte gTasks
-_0800C608: .4byte sub_800C704
-_0800C60C:
- movs r0, 0
- bl sub_800D094
- ldr r0, _0800C62C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- strh r6, [r1, 0x8]
- ldr r1, _0800C630 @ =gUnknown_8415C64
- adds r0, r5, 0
- bl sub_800C634
-_0800C626:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C62C: .4byte gTasks
-_0800C630: .4byte gUnknown_8415C64
- thumb_func_end sub_800C4D0
-
- thumb_func_start sub_800C634
-sub_800C634: @ 800C634
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r0, r1, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_800CDF8
- ldr r1, _0800C678 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0800C67C @ =sub_800C688
- str r1, [r0]
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0800C680 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- bl ShowBg
- ldr r0, _0800C684 @ =sub_800C2EC
- bl SetVBlankCallback
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C678: .4byte gTasks
-_0800C67C: .4byte sub_800C688
-_0800C680: .4byte 0x0000ffff
-_0800C684: .4byte sub_800C2EC
- thumb_func_end sub_800C634
-
- thumb_func_start sub_800C688
-sub_800C688: @ 800C688
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800C6E0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800C6F8
- bl RunTextPrinters
- movs r0, 0x4
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0800C6F8
- ldr r0, _0800C6E4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0800C6F8
- movs r0, 0x4
- bl ClearWindowTilemap
- ldr r0, _0800C6E8 @ =gUnknown_8234638
- bl sub_800D1E8
- movs r0, 0
- bl sub_800D044
- ldr r1, _0800C6EC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r1
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0800C6F4
- ldr r0, _0800C6F0 @ =sub_800C704
- b _0800C6F6
- .align 2, 0
-_0800C6E0: .4byte gPaletteFade
-_0800C6E4: .4byte gMain
-_0800C6E8: .4byte gUnknown_8234638
-_0800C6EC: .4byte gTasks
-_0800C6F0: .4byte sub_800C704
-_0800C6F4:
- ldr r0, _0800C700 @ =sub_800C7A0
-_0800C6F6:
- str r0, [r1]
-_0800C6F8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C700: .4byte sub_800C7A0
- thumb_func_end sub_800C688
-
- thumb_func_start sub_800C704
-sub_800C704: @ 800C704
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800C764 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800C774
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x1
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x21
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xFF
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x7
- bl SetGpuReg
- ldr r0, _0800C768 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0800C770
- ldr r0, _0800C76C @ =sub_800CA94
- b _0800C772
- .align 2, 0
-_0800C764: .4byte gPaletteFade
-_0800C768: .4byte gTasks
-_0800C76C: .4byte sub_800CA94
-_0800C770:
- ldr r0, _0800C77C @ =sub_800C780
-_0800C772:
- str r0, [r1]
-_0800C774:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C77C: .4byte sub_800C780
- thumb_func_end sub_800C704
-
- thumb_func_start sub_800C780
-sub_800C780: @ 800C780
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0800C79C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800C798
- adds r0, r2, 0
- bl sub_800C7A0
-_0800C798:
- pop {r0}
- bx r0
- .align 2, 0
-_0800C79C: .4byte gPaletteFade
- thumb_func_end sub_800C780
-
- thumb_func_start sub_800C7A0
-sub_800C7A0: @ 800C7A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x1
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x21
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xFF
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x7
- bl SetGpuReg
- ldr r0, _0800C7F4 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _0800C7FC
- ldr r1, _0800C7F8 @ =0x00007e04
- b _0800C7FE
- .align 2, 0
-_0800C7F4: .4byte gSaveBlock2Ptr
-_0800C7F8: .4byte 0x00007e04
-_0800C7FC:
- ldr r1, _0800C85C @ =0x0000547f
-_0800C7FE:
- add r0, sp, 0xC
- strh r1, [r0]
- add r0, sp, 0xC
- movs r1, 0xF1
- movs r2, 0x2
- bl LoadPalette
- ldr r2, _0800C860 @ =gTasks
- lsls r1, r7, 2
- adds r0, r1, r7
- lsls r0, 3
- adds r6, r0, r2
- movs r2, 0x8
- ldrsh r0, [r6, r2]
- mov r8, r1
- cmp r0, 0x1
- beq _0800C870
- cmp r0, 0x1
- ble _0800C828
- cmp r0, 0x2
- beq _0800C8F0
-_0800C828:
- movs r0, 0
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r0, _0800C864 @ =gUnknown_8234688
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r0, _0800C868 @ =gUnknown_8415A6E
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- ldr r0, _0800C86C @ =gUnknown_8234618
- bl sub_800D0B4
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- b _0800C8D8
- .align 2, 0
-_0800C85C: .4byte 0x0000547f
-_0800C860: .4byte gTasks
-_0800C864: .4byte gUnknown_8234688
-_0800C868: .4byte gUnknown_8415A6E
-_0800C86C: .4byte gUnknown_8234618
-_0800C870:
- movs r0, 0x1
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x2
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r5, _0800C8E0 @ =gUnknown_8234688
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0800C8E4 @ =gUnknown_8415A77
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, _0800C8E8 @ =gUnknown_8415A6E
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- bl sub_800CE58
- ldr r4, _0800C8EC @ =gUnknown_8234620
- adds r0, r4, 0
- bl sub_800D0B4
- adds r4, 0x8
- adds r0, r4, 0
- bl sub_800D0B4
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x2
-_0800C8D8:
- movs r1, 0x3
- bl CopyWindowToVram
- b _0800C994
- .align 2, 0
-_0800C8E0: .4byte gUnknown_8234688
-_0800C8E4: .4byte gUnknown_8415A77
-_0800C8E8: .4byte gUnknown_8415A6E
-_0800C8EC: .4byte gUnknown_8234620
-_0800C8F0:
- movs r0, 0x1
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x2
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r5, _0800C9B0 @ =gUnknown_8234688
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0800C9B4 @ =gUnknown_8415A77
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, _0800C9B8 @ =gUnknown_8415A6E
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- movs r0, 0x1
- strh r0, [r6, 0x1C]
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, _0800C9BC @ =gUnknown_8415A97
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- bl sub_800CE58
- ldr r4, _0800C9C0 @ =gUnknown_8234620
- adds r0, r4, 0
- bl sub_800D0B4
- adds r0, r4, 0
- adds r0, 0x8
- bl sub_800D0B4
- adds r4, 0x10
- adds r0, r4, 0
- bl sub_800D0B4
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x3
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x3
- movs r1, 0x3
- bl CopyWindowToVram
-_0800C994:
- ldr r0, _0800C9C4 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _0800C9C8 @ =sub_800C9CC
- str r0, [r1]
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C9B0: .4byte gUnknown_8234688
-_0800C9B4: .4byte gUnknown_8415A77
-_0800C9B8: .4byte gUnknown_8415A6E
-_0800C9BC: .4byte gUnknown_8415A97
-_0800C9C0: .4byte gUnknown_8234620
-_0800C9C4: .4byte gTasks
-_0800C9C8: .4byte sub_800C9CC
- thumb_func_end sub_800C7A0
-
- thumb_func_start sub_800C9CC
-sub_800C9CC: @ 800C9CC
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- movs r5, 0x1
- negs r5, r5
- adds r0, r5, 0
- bl CheckForSpaceForDma3Request
- lsls r0, 16
- asrs r0, 16
- cmp r0, r5
- beq _0800CA10
- ldr r1, _0800CA18 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0800CA1C @ =sub_800CA28
- str r1, [r0]
- ldr r0, _0800CA20 @ =0x0000ffff
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- bl ShowBg
- ldr r0, _0800CA24 @ =sub_800C2EC
- bl SetVBlankCallback
-_0800CA10:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CA18: .4byte gTasks
-_0800CA1C: .4byte sub_800CA28
-_0800CA20: .4byte 0x0000ffff
-_0800CA24: .4byte sub_800C2EC
- thumb_func_end sub_800C9CC
-
- thumb_func_start sub_800CA28
-sub_800CA28: @ 800CA28
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800CA4C @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- ldrb r0, [r4, 0x8]
- ldrb r1, [r4, 0xA]
- bl sub_800CC94
- ldr r0, _0800CA50 @ =sub_800CA54
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CA4C: .4byte gTasks
-_0800CA50: .4byte sub_800CA54
- thumb_func_end sub_800CA28
-
- thumb_func_start sub_800CA54
-sub_800CA54: @ 800CA54
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800CA88 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800CA80
- adds r0, r4, 0
- bl sub_800CCF8
- lsls r0, 24
- cmp r0, 0
- beq _0800CA80
- ldr r0, _0800CA8C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0800CA90 @ =sub_800CA28
- str r0, [r1]
-_0800CA80:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CA88: .4byte gPaletteFade
-_0800CA8C: .4byte gTasks
-_0800CA90: .4byte sub_800CA28
- thumb_func_end sub_800CA54
-
- thumb_func_start sub_800CA94
-sub_800CA94: @ 800CA94
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0800CAC4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800CB84
- ldr r1, _0800CAC8 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0800CACC
- cmp r0, 0x1
- ble _0800CAEE
- cmp r0, 0x2
- beq _0800CADA
- b _0800CAEE
- .align 2, 0
-_0800CAC4: .4byte gPaletteFade
-_0800CAC8: .4byte gTasks
-_0800CACC:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0800CAEA
- cmp r0, 0x1
- bne _0800CAEA
- b _0800CAEE
-_0800CADA:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0800CAEE
- cmp r0, 0x1
- ble _0800CAEA
- cmp r0, 0x2
- beq _0800CAF2
-_0800CAEA:
- movs r0, 0x1
- b _0800CB22
-_0800CAEE:
- movs r0, 0
- b _0800CB22
-_0800CAF2:
- bl IsWirelessAdapterConnected
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _0800CB20
- movs r0, 0
- bl sub_800D094
- ldr r0, _0800CB1C @ =sub_800CB90
- str r0, [r4]
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _0800CB84
- .align 2, 0
-_0800CB1C: .4byte sub_800CB90
-_0800CB20:
- movs r0, 0x2
-_0800CB22:
- cmp r0, 0x1
- beq _0800CB48
- cmp r0, 0x1
- ble _0800CB2E
- cmp r0, 0x2
- beq _0800CB70
-_0800CB2E:
- ldr r1, _0800CB44 @ =gUnknown_2031DE0
- movs r0, 0
- strb r0, [r1]
- bl FreeAllWindowBuffers
- adds r0, r6, 0
- bl DestroyTask
- bl StartNewGameScene
- b _0800CB84
- .align 2, 0
-_0800CB44: .4byte gUnknown_2031DE0
-_0800CB48:
- ldr r0, _0800CB64 @ =gPlttBufferUnfaded
- movs r2, 0
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0800CB68 @ =gPlttBufferFaded
- strh r1, [r0]
- ldr r0, _0800CB6C @ =gUnknown_2031DE0
- strb r2, [r0]
- bl FreeAllWindowBuffers
- adds r0, r6, 0
- bl sub_8110F14
- b _0800CB84
- .align 2, 0
-_0800CB64: .4byte gPlttBufferUnfaded
-_0800CB68: .4byte gPlttBufferFaded
-_0800CB6C: .4byte gUnknown_2031DE0
-_0800CB70:
- ldr r0, _0800CB8C @ =c2_mystery_gift
- bl SetMainCallback2
- bl sub_812B478
- bl FreeAllWindowBuffers
- adds r0, r6, 0
- bl DestroyTask
-_0800CB84:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CB8C: .4byte c2_mystery_gift
- thumb_func_end sub_800CA94
-
- thumb_func_start sub_800CB90
-sub_800CB90: @ 800CB90
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0800CBB4 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0x1A
- ldrsh r1, [r4, r0]
- cmp r1, 0x1
- beq _0800CC0C
- cmp r1, 0x1
- bgt _0800CBB8
- cmp r1, 0
- beq _0800CBC2
- b _0800CC58
- .align 2, 0
-_0800CBB4: .4byte gTasks
-_0800CBB8:
- cmp r1, 0x2
- beq _0800CC1C
- cmp r1, 0x3
- beq _0800CC34
- b _0800CC58
-_0800CBC2:
- movs r0, 0x1E
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _0800CBEC
- ldr r0, _0800CBE8 @ =gUnknown_8415AA4
- bl sub_800CDF8
- b _0800CBF2
- .align 2, 0
-_0800CBE8: .4byte gUnknown_8415AA4
-_0800CBEC:
- ldr r0, _0800CC04 @ =gUnknown_8415ACB
- bl sub_800CDF8
-_0800CBF2:
- ldr r0, _0800CC08 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1A]
- adds r0, 0x1
- strh r0, [r1, 0x1A]
- b _0800CC58
- .align 2, 0
-_0800CC04: .4byte gUnknown_8415ACB
-_0800CC08: .4byte gTasks
-_0800CC0C:
- ldr r0, _0800CC18 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- b _0800CC28
- .align 2, 0
-_0800CC18: .4byte gPaletteFade
-_0800CC1C:
- bl RunTextPrinters
- movs r0, 0x4
- bl IsTextPrinterActive
- lsls r0, 16
-_0800CC28:
- cmp r0, 0
- bne _0800CC58
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
- b _0800CC58
-_0800CC34:
- ldr r0, _0800CC60 @ =gMain
- ldrh r0, [r0, 0x2E]
- ands r1, r0
- cmp r1, 0
- beq _0800CC58
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0800CC64 @ =sub_800CC68
- str r0, [r4]
-_0800CC58:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CC60: .4byte gMain
-_0800CC64: .4byte sub_800CC68
- thumb_func_end sub_800CB90
-
- thumb_func_start sub_800CC68
-sub_800CC68: @ 800CC68
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800CC8C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800CC86
- ldr r0, _0800CC90 @ =CB2_InitTitleScreen
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_0800CC86:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CC8C: .4byte gPaletteFade
-_0800CC90: .4byte CB2_InitTitleScreen
- thumb_func_end sub_800CC68
-
- thumb_func_start sub_800CC94
-sub_800CC94: @ 800CC94
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r1, _0800CCB8 @ =0x000012de
- movs r0, 0x40
- bl SetGpuReg
- cmp r4, 0
- beq _0800CCB2
- cmp r4, 0
- blt _0800CCB2
- cmp r4, 0x2
- ble _0800CCBC
-_0800CCB2:
- movs r2, 0
- movs r0, 0x20
- b _0800CCDC
- .align 2, 0
-_0800CCB8: .4byte 0x000012de
-_0800CCBC:
- cmp r5, 0x1
- beq _0800CCCE
- cmp r5, 0x1
- ble _0800CCC8
- cmp r5, 0x2
- beq _0800CCD6
-_0800CCC8:
- movs r2, 0
- movs r0, 0x60
- b _0800CCDC
-_0800CCCE:
- movs r2, 0xC0
- lsls r2, 7
- movs r0, 0x80
- b _0800CCDC
-_0800CCD6:
- movs r2, 0x80
- lsls r2, 8
- movs r0, 0xA0
-_0800CCDC:
- movs r3, 0x80
- lsls r3, 2
- adds r1, r3, 0
- adds r1, r2, r1
- subs r0, 0x2
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x44
- bl SetGpuReg
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_800CC94
-
- thumb_func_start sub_800CCF8
-sub_800CCF8: @ 800CCF8
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800CD38 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r5, 0x1
- ands r5, r1
- adds r3, r0, 0
- cmp r5, 0
- beq _0800CD44
- movs r0, 0x5
- bl PlaySE
- bl IsWirelessAdapterConnected
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0800CD3C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0800CD40 @ =sub_800CA94
- str r1, [r0]
- b _0800CDEC
- .align 2, 0
-_0800CD38: .4byte gMain
-_0800CD3C: .4byte gTasks
-_0800CD40: .4byte sub_800CA94
-_0800CD44:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800CD8C
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xA0
- bl SetGpuReg
- ldr r1, _0800CD84 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0800CD88 @ =sub_800CC68
- str r1, [r0]
- b _0800CDEC
- .align 2, 0
-_0800CD84: .4byte gTasks
-_0800CD88: .4byte sub_800CC68
-_0800CD8C:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800CDB4
- ldr r0, _0800CDB0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0xA]
- movs r5, 0xA
- ldrsh r0, [r1, r5]
- cmp r0, 0
- ble _0800CDB4
- subs r0, r2, 0x1
- strh r0, [r1, 0xA]
- movs r0, 0x1
- b _0800CDEE
- .align 2, 0
-_0800CDB0: .4byte gTasks
-_0800CDB4:
- ldrh r1, [r3, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0800CDEC
- ldr r1, _0800CDE4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r3, r0, r1
- movs r0, 0xA
- ldrsh r2, [r3, r0]
- ldr r1, _0800CDE8 @ =gUnknown_8234694
- movs r4, 0x8
- ldrsh r0, [r3, r4]
- adds r0, r1
- ldrb r0, [r0]
- cmp r2, r0
- bge _0800CDEC
- ldrh r0, [r3, 0xA]
- adds r0, 0x1
- strh r0, [r3, 0xA]
- movs r0, 0x1
- b _0800CDEE
- .align 2, 0
-_0800CDE4: .4byte gTasks
-_0800CDE8: .4byte gUnknown_8234694
-_0800CDEC:
- movs r0, 0
-_0800CDEE:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_800CCF8
-
- thumb_func_start sub_800CDF8
-sub_800CDF8: @ 800CDF8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r0, 0x4
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r0, _0800CE48 @ =gUnknown_8234638
- bl sub_800D0B4
- ldr r0, _0800CE4C @ =gUnknown_8234688
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x4
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r1, _0800CE50 @ =0x000013dd
- movs r0, 0x40
- bl SetGpuReg
- ldr r1, _0800CE54 @ =0x0000739d
- movs r0, 0x44
- bl SetGpuReg
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CE48: .4byte gUnknown_8234638
-_0800CE4C: .4byte gUnknown_8234688
-_0800CE50: .4byte 0x000013dd
-_0800CE54: .4byte 0x0000739d
- thumb_func_end sub_800CDF8
-
- thumb_func_start sub_800CE58
-sub_800CE58: @ 800CE58
- push {lr}
- bl sub_800CE70
- bl sub_800CF3C
- bl sub_800CED4
- bl sub_800CFC4
- pop {r0}
- bx r0
- thumb_func_end sub_800CE58
-
- thumb_func_start sub_800CE70
-sub_800CE70: @ 800CE70
- push {lr}
- sub sp, 0x14
- ldr r0, _0800CEC8 @ =gUnknown_823468B
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r0, _0800CECC @ =gUnknown_841B6D5
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x12
- bl AddTextPrinterParameterized3
- add r1, sp, 0xC
- movs r2, 0
- ldr r0, _0800CED0 @ =gSaveBlock2Ptr
- ldr r3, [r0]
-_0800CE96:
- adds r0, r3, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, 0x1
- adds r2, 0x1
- cmp r2, 0x6
- ble _0800CE96
- movs r0, 0xFF
- strb r0, [r1]
- ldr r0, _0800CEC8 @ =gUnknown_823468B
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x3E
- movs r3, 0x12
- bl AddTextPrinterParameterized3
- add sp, 0x14
- pop {r0}
- bx r0
- .align 2, 0
-_0800CEC8: .4byte gUnknown_823468B
-_0800CECC: .4byte gUnknown_841B6D5
-_0800CED0: .4byte gSaveBlock2Ptr
- thumb_func_end sub_800CE70
-
- thumb_func_start sub_800CED4
-sub_800CED4: @ 800CED4
- push {r4-r6,lr}
- sub sp, 0x2C
- ldr r6, _0800CF30 @ =gUnknown_823468B
- str r6, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- ldr r0, _0800CF34 @ =gUnknown_841B6DC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x22
- bl AddTextPrinterParameterized3
- ldr r4, _0800CF38 @ =gSaveBlock2Ptr
- ldr r0, [r4]
- ldrh r1, [r0, 0xE]
- add r0, sp, 0xC
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- movs r1, 0xF0
- strb r1, [r0]
- adds r0, 0x1
- ldr r1, [r4]
- ldrb r1, [r1, 0x10]
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- str r6, [sp]
- str r5, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x3E
- movs r3, 0x22
- bl AddTextPrinterParameterized3
- add sp, 0x2C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CF30: .4byte gUnknown_823468B
-_0800CF34: .4byte gUnknown_841B6DC
-_0800CF38: .4byte gSaveBlock2Ptr
- thumb_func_end sub_800CED4
-
- thumb_func_start sub_800CF3C
-sub_800CF3C: @ 800CF3C
- push {r4-r6,lr}
- sub sp, 0x2C
- ldr r0, _0800CF60 @ =0x00000829
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0800CFAE
- bl IsNationalPokedexEnabled
- cmp r0, 0
- beq _0800CF64
- movs r0, 0x1
- bl GetNationalPokedexCount
- b _0800CF6A
- .align 2, 0
-_0800CF60: .4byte 0x00000829
-_0800CF64:
- movs r0, 0x1
- bl GetKantoPokedexCount
-_0800CF6A:
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r5, _0800CFB8 @ =gUnknown_823468B
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0800CFBC @ =gUnknown_841B6E3
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x32
- bl AddTextPrinterParameterized3
- add r0, sp, 0xC
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r1, _0800CFC0 @ =gUnknown_841B6EB
- bl StringAppend
- str r5, [sp]
- str r4, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x3E
- movs r3, 0x32
- bl AddTextPrinterParameterized3
-_0800CFAE:
- add sp, 0x2C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800CFB8: .4byte gUnknown_823468B
-_0800CFBC: .4byte gUnknown_841B6E3
-_0800CFC0: .4byte gUnknown_841B6EB
- thumb_func_end sub_800CF3C
-
- thumb_func_start sub_800CFC4
-sub_800CFC4: @ 800CFC4
- push {r4-r6,lr}
- sub sp, 0x2C
- movs r6, 0
- movs r4, 0x82
- lsls r4, 4
-_0800CFCE:
- lsls r0, r4, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0800CFE2
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0800CFE2:
- adds r4, 0x1
- ldr r0, _0800D034 @ =0x00000827
- cmp r4, r0
- bls _0800CFCE
- ldr r5, _0800D038 @ =gUnknown_823468B
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, _0800D03C @ =gUnknown_841B6EC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x2
- movs r3, 0x42
- bl AddTextPrinterParameterized3
- add r0, sp, 0xC
- adds r1, r6, 0
- movs r2, 0x2
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- ldr r1, _0800D040 @ =gUnknown_841B6F3
- bl StringAppend
- str r5, [sp]
- str r4, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0x3E
- movs r3, 0x42
- bl AddTextPrinterParameterized3
- add sp, 0x2C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D034: .4byte 0x00000827
-_0800D038: .4byte gUnknown_823468B
-_0800D03C: .4byte gUnknown_841B6EC
-_0800D040: .4byte gUnknown_841B6F3
- thumb_func_end sub_800CFC4
-
- thumb_func_start sub_800D044
-sub_800D044: @ 800D044
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _0800D088 @ =gSaveBlock2Ptr
- ldr r0, [r5]
- ldrb r0, [r0, 0x14]
- lsrs r0, 3
- bl sub_8069788
- ldr r1, [r0]
- movs r2, 0x90
- lsls r2, 1
- ldr r3, _0800D08C @ =0x000001b1
- adds r0, r4, 0
- bl LoadBgTiles
- ldr r0, [r5]
- ldrb r0, [r0, 0x14]
- lsrs r0, 3
- bl sub_8069788
- ldr r0, [r0, 0x4]
- movs r1, 0x20
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0800D090 @ =gUnknown_8234638
- bl sub_800D1E8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D088: .4byte gSaveBlock2Ptr
-_0800D08C: .4byte 0x000001b1
-_0800D090: .4byte gUnknown_8234638
- thumb_func_end sub_800D044
-
- thumb_func_start sub_800D094
-sub_800D094: @ 800D094
- push {lr}
- ldr r1, _0800D0AC @ =0x000001b1
- movs r0, 0
- movs r2, 0x20
- bl TextWindow_SetStdFrame0_WithPal
- ldr r0, _0800D0B0 @ =gUnknown_8234638
- bl sub_800D1E8
- pop {r0}
- bx r0
- .align 2, 0
-_0800D0AC: .4byte 0x000001b1
-_0800D0B0: .4byte gUnknown_8234638
- thumb_func_end sub_800D094
-
- thumb_func_start sub_800D0B4
-sub_800D0B4: @ 800D0B4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- adds r5, r0, 0
- ldrb r0, [r5]
- ldr r1, _0800D1D8 @ =0x000001b1
- ldrb r2, [r5, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r5, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- movs r6, 0x1
- str r6, [sp]
- str r6, [sp, 0x4]
- movs r4, 0x2
- mov r8, r4
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- movs r1, 0xD9
- lsls r1, 1
- ldrb r2, [r5, 0x1]
- ldrb r3, [r5, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r4, [r5, 0x3]
- str r4, [sp]
- ldrb r4, [r5, 0x4]
- str r4, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- ldr r1, _0800D1DC @ =0x000001b3
- ldrb r2, [r5, 0x3]
- ldrb r3, [r5, 0x1]
- adds r2, r3
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r5, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- str r6, [sp]
- str r6, [sp, 0x4]
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- movs r1, 0xDA
- lsls r1, 1
- ldrb r2, [r5, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r5, 0x2]
- str r6, [sp]
- ldrb r4, [r5, 0x4]
- str r4, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- movs r1, 0xDB
- lsls r1, 1
- ldrb r2, [r5, 0x3]
- ldrb r3, [r5, 0x1]
- adds r2, r3
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r5, 0x2]
- str r6, [sp]
- ldrb r4, [r5, 0x4]
- str r4, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- ldr r1, _0800D1E0 @ =0x000001b7
- ldrb r2, [r5, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r5, 0x4]
- ldrb r4, [r5, 0x2]
- adds r3, r4
- lsls r3, 24
- lsrs r3, 24
- str r6, [sp]
- str r6, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- movs r1, 0xDC
- lsls r1, 1
- ldrb r2, [r5, 0x1]
- ldrb r3, [r5, 0x4]
- ldrb r4, [r5, 0x2]
- adds r3, r4
- lsls r3, 24
- lsrs r3, 24
- ldrb r4, [r5, 0x3]
- str r4, [sp]
- str r6, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- ldr r1, _0800D1E4 @ =0x000001b9
- ldrb r2, [r5, 0x3]
- ldrb r3, [r5, 0x1]
- adds r2, r3
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r5, 0x4]
- ldrb r4, [r5, 0x2]
- adds r3, r4
- lsls r3, 24
- lsrs r3, 24
- str r6, [sp]
- str r6, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r5]
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800D1D8: .4byte 0x000001b1
-_0800D1DC: .4byte 0x000001b3
-_0800D1E0: .4byte 0x000001b7
-_0800D1E4: .4byte 0x000001b9
- thumb_func_end sub_800D0B4
-
- thumb_func_start sub_800D1E8
-sub_800D1E8: @ 800D1E8
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldrb r0, [r6]
- ldrb r1, [r6, 0x1]
- subs r2, r1, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r4, [r6, 0x2]
- subs r3, r4, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r5, [r6, 0x3]
- adds r1, r5
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- ldrb r1, [r6, 0x4]
- adds r4, r1
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp, 0x4]
- movs r1, 0x2
- str r1, [sp, 0x8]
- movs r1, 0
- bl FillBgTilemapBufferRect
- ldrb r0, [r6]
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_800D1E8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/mon_markings.s b/asm/mon_markings.s
index 568129eff..5408a70be 100644
--- a/asm/mon_markings.s
+++ b/asm/mon_markings.s
@@ -22,7 +22,7 @@ sub_80BE478: @ 80BE478
ldr r0, [r0]
ldrb r0, [r0, 0x14]
lsrs r0, 3
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r3, _080BE4B4 @ =gUnknown_20399C0
ldr r2, [r3]
ldr r1, [r0]
diff --git a/asm/option_menu.s b/asm/option_menu.s
index bf626caba..bb370f0ba 100644
--- a/asm/option_menu.s
+++ b/asm/option_menu.s
@@ -459,7 +459,7 @@ _0808870C:
b _08088768
_08088716:
ldrb r0, [r0, 0xA]
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r1, [r0]
movs r2, 0x90
lsls r2, 1
@@ -470,7 +470,7 @@ _08088716:
b _0808876C
_0808872E:
ldrb r0, [r0, 0xA]
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r0, [r0, 0x4]
movs r1, 0x20
b _0808874C
@@ -590,7 +590,7 @@ _08088824:
ldr r4, _08088854 @ =gUnknown_2039620
ldr r0, [r4]
ldrb r0, [r0, 0xA]
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r1, [r0]
movs r2, 0x90
lsls r2, 1
@@ -600,7 +600,7 @@ _08088824:
bl LoadBgTiles
ldr r0, [r4]
ldrb r0, [r0, 0xA]
- bl sub_8069788
+ bl GetUserFrameGraphicsInfo
ldr r0, [r0, 0x4]
movs r1, 0x20
movs r2, 0x20
diff --git a/asm/trade.s b/asm/trade.s
index 0c1c168cc..8e6131f9d 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -11140,7 +11140,7 @@ _0805230A:
ldr r0, _08052328 @ =CB2_ReturnToField
bl SetMainCallback2
bl sub_8053AE4
- bl sub_812B484
+ bl HelpSystem_Enable
_08052318:
movs r0, 0
_0805231A:
@@ -13365,7 +13365,7 @@ _08053766:
ldr r0, _08053784 @ =CB2_ReturnToField
bl SetMainCallback2
bl sub_8053AE4
- bl sub_812B484
+ bl HelpSystem_Enable
_08053774:
movs r0, 0
_08053776:
@@ -14854,7 +14854,7 @@ sub_8054440: @ 8054440
movs r2, 0
movs r3, 0x10
bl BeginNormalPaletteFade
- bl sub_812B478
+ bl HelpSystem_Disable
add sp, 0x4
pop {r0}
bx r0
diff --git a/baserom.ips b/baserom.ips
index ae98df165..b1ef4e9dc 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/berry_fix/payload/include/global.h b/berry_fix/payload/include/global.h
index c218b5f4e..911c4cd8f 100644
--- a/berry_fix/payload/include/global.h
+++ b/berry_fix/payload/include/global.h
@@ -115,7 +115,7 @@ enum
enum
{
- OPTIONS_BUTTON_MODE_NORMAL,
+ OPTIONS_BUTTON_MODE_HELP,
OPTIONS_BUTTON_MODE_LR,
OPTIONS_BUTTON_MODE_L_EQUALS_A
};
diff --git a/common_syms/help_system.txt b/common_syms/help_system.txt
new file mode 100644
index 000000000..af59733d4
--- /dev/null
+++ b/common_syms/help_system.txt
@@ -0,0 +1 @@
+gHelpSystemEnabled
diff --git a/data/data.s b/data/data.s
index d0bd198e1..0883c65d7 100644
--- a/data/data.s
+++ b/data/data.s
@@ -6,41 +6,7 @@
.section .rodata
- .align 2, 0
-gUnknown_8234614::
- .string "$"
-
-gUnknown_8234615::
- .string "\n$"
-
- .align 2, 0
-gUnknown_8234618:: @ 8234618
- .incbin "baserom.gba", 0x234618, 0x8
-
-gUnknown_8234620:: @ 8234620
- .incbin "baserom.gba", 0x234620, 0x18
-
-gUnknown_8234638:: @ 8234638
- .incbin "baserom.gba", 0x234638, 0x10
-
-gUnknown_8234648:: @ 8234648
- .incbin "baserom.gba", 0x234648, 0x20
-
-gUnknown_8234668:: @ 8234668
- .incbin "baserom.gba", 0x234668, 0x20
-
-gUnknown_8234688:: @ 8234688
- .incbin "baserom.gba", 0x234688, 0x3
-
-gUnknown_823468B:: @ 823468B
- .incbin "baserom.gba", 0x23468B, 0x5
-
-gUnknown_8234690:: @ 8234690
- .incbin "baserom.gba", 0x234690, 0x4
-
-gUnknown_8234694:: @ 8234694
- .incbin "baserom.gba", 0x234694, 0x4
-
+ .align 2
gUnknown_8234698:: @ 8234698
.incbin "baserom.gba", 0x234698, 0x20
diff --git a/data/main_menu/unk_8234648.pal b/data/main_menu/unk_8234648.pal
new file mode 100644
index 000000000..7aca54c52
--- /dev/null
+++ b/data/main_menu/unk_8234648.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+139 148 255
+255 255 255
+49 57 82
+90 98 115
+8 8 16
+148 156 172
+205 222 238
+180 180 189
+189 205 222
+32 32 49
+123 131 139
+49 82 123
+41 123 197
+57 139 213
+90 164 230
+139 197 246
diff --git a/data/main_menu/unk_8234668.pal b/data/main_menu/unk_8234668.pal
new file mode 100644
index 000000000..022f0051f
--- /dev/null
+++ b/data/main_menu/unk_8234668.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 255 255
+98 98 98
+213 213 205
+230 8 8
+255 189 115
+32 156 8
+148 246 148
+49 82 205
+164 197 246
+255 255 255
+98 98 98
+213 213 205
+0 0 0
+0 0 0
+0 0 0
diff --git a/data/specials.inc b/data/specials.inc
index 5e9a3aeae..6111e4836 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -417,8 +417,8 @@ gSpecials:: @ 815FD60
def_special sub_814B504
def_special sub_80CC8CC
def_special sub_80CC948
- def_special sub_812B478
- def_special sub_812B484
+ def_special HelpSystem_Disable
+ def_special HelpSystem_Enable
def_special sub_810B82C
def_special CheckHasAtLeastOneBerry
def_special sub_815F094
diff --git a/data/strings.s b/data/strings.s
index be47054b5..e43a37050 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -48,25 +48,25 @@ gText_EggNickname:: @ 8415A62
gText_Pokemon:: @ 8415A66
.string "POKéMON$"
-gUnknown_8415A6E:: @ 8415A6E
+gText_NewGame:: @ 8415A6E
.string "NEW GAME$"
-gUnknown_8415A77:: @ 8415A77
+gText_Continue:: @ 8415A77
.string "CONTINUE$"
-gUnknown_8415A80:: @ 0x8415A80
+gTextJP_Options:: @ 0x8415A80
.string "せっていを かえる$"
-gUnknown_8415A8A:: @ 0x8415A8A
+gUnusedText_MysteryGift:: @ 0x8415A8A
.string "MYSTERY GIFT$"
-gUnknown_8415A97:: @ 8415A97
+gText_MysteryGift:: @ 8415A97
.string "MYSTERY GIFT$"
-gUnknown_8415AA4:: @ 8415AA4
+gText_WirelessAdapterIsNotConnected:: @ 8415AA4
.string "The Wireless Adapter is not\nconnected.$"
-gUnknown_8415ACB:: @ 8415ACB
+gText_MysteryGiftCantBeUsedWhileWirelessAdapterIsAttached:: @ 8415ACB
.string "MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached.$"
gUnknown_8415B0E:: @ 0x8415B0E
@@ -81,16 +81,16 @@ gUnknown_8415B44:: @ 0x8415B44
gUnknown_8415BAA:: @ 0x8415BAA
.string "レポ-トの こうしんは\nしっぱいしました!\pバックアップカ-トリッジを\nこうかんしてください!\pくわしくは\nにんてんどう サ-ビスセンタ- まで\lおといあわせ ください$"
-gUnknown_8415BFF:: @ 8415BFF
+gText_SaveFileCorruptedPrevWillBeLoaded:: @ 8415BFF
.string "The save file is corrupted.\pThe previous save file will be\nloaded.$"
-gUnknown_8415C42:: @ 8415C42
+gText_SaveFileHasBeenDeleted:: @ 8415C42
.string "The save file has been\ndeleted...$"
-gUnknown_8415C64:: @ 8415C64
+gText_1MSubCircuitBoardNotInstalled:: @ 8415C64
.string "The 1M sub-circuit board is\nnot installed.$"
-gUnknown_8415C8F:: @ 0x8415C8F
+gTextJP_InternalBatteryHasRunDry:: @ 0x8415C8F
.string "でんちぎれの ために\nとけいが うごかなくなりました\pとけいに かんけいする できごとは おきませんが\nゲ-ムを つづけて あそぶことは できます$"
gUnknown_8415CD9:: @ 0x8415CD9
@@ -3037,25 +3037,25 @@ gUnknown_841B69E:: @ 841B69E
gUnknown_841B6B9:: @ 841B6B9
.string "Clearing data‥\nPlease wait.$"
-gUnknown_841B6D5:: @ 841B6D5
+gText_Player:: @ 841B6D5
.string "PLAYER$"
-gUnknown_841B6DC:: @ 841B6DC
+gText_Time:: @ 841B6DC
.string "TIME$"
-gUnknown_841B6E1:: @ 0x841B6E1
+gText_Colon:: @ 0x841B6E1
.string ":$"
-gUnknown_841B6E3:: @ 841B6E3
+gText_Pokedex:: @ 841B6E3
.string "POKéDEX$"
-gUnknown_841B6EB:: @ 841B6EB
+gTextJPDummy_Hiki:: @ 841B6EB
.string "$"
-gUnknown_841B6EC:: @ 841B6EC
+gText_Badges:: @ 841B6EC
.string "BADGES$"
-gUnknown_841B6F3:: @ 841B6F3
+gTextJPDummy_Ko:: @ 841B6F3
.string "$"
gUnknown_841B6F4:: @ 0x841B6F4
@@ -4199,7 +4199,7 @@ gText_WonderCardThrownAway:: @ 841ED7B
gText_WonderNewsThrownAway:: @ 841ED9C
.string "The WONDER NEWS was thrown away.$"
-gText_MysteryGift:: @ 841EDBD
+gText_MysteryGift2:: @ 841EDBD
.string "MYSTERY GIFT$"
gText_PickOKCancel:: @ 841EDCA
diff --git a/include/constants/flags.h b/include/constants/flags.h
index a992bc365..a4b891aca 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1377,7 +1377,7 @@
#define TRAINERS_FLAG_NO 0x356
#define CODE_FLAGS (FLAG_TRAINER_FLAG_START + TRAINERS_FLAG_NO + 0xA) // 0x860
-// TODO: Find what these are
+// TODO: These three are badge flags
#define FLAG_UNK820 0x820
#define FLAG_UNK824 0x824
#define FLAG_UNK826 0x826
diff --git a/include/constants/global.h b/include/constants/global.h
index 3cac8d473..d7508c940 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -45,7 +45,7 @@ enum
enum
{
- OPTIONS_BUTTON_MODE_NORMAL,
+ OPTIONS_BUTTON_MODE_HELP,
OPTIONS_BUTTON_MODE_LR,
OPTIONS_BUTTON_MODE_L_EQUALS_A
};
diff --git a/include/constants/songs.h b/include/constants/songs.h
index 193a57756..3c0e72757 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -254,7 +254,7 @@
#define SE_SHIP_HORN 249
#define SE_HELP_OPEN 250
#define SE_HELP_CLOSE 251
-#define SE_HELP_PAGE 252
+#define SE_HELP_ERR 252
#define MUS_ME_ASA 256
#define MUS_FANFA1 257
diff --git a/include/event_data.h b/include/event_data.h
index 036b0a325..7c62ac92b 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -32,7 +32,7 @@ u8 FlagSet(u16 id);
u8 FlagClear(u16 id);
bool8 FlagGet(u16 id);
u16 * GetVarPointer(u16 id);
-bool32 sub_806E2BC(void);
+bool32 Flag_0x839_IsSet(void);
void sub_806E6FC(void);
void sub_806E2D0(void);
void sub_806E370(void);
diff --git a/include/help_system.h b/include/help_system.h
index 3ba0cf475..f28c168f7 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -25,7 +25,7 @@ struct HelpSystemListMenu
extern struct HelpSystemListMenu gHelpSystemListMenu;
extern struct ListMenuItem gHelpSystemListMenuItems[];
-extern bool8 gUnknown_3005ECC;
+extern bool8 gHelpSystemEnabled;
extern u8 gUnknown_203F175;
// help_system_812B1E0
@@ -33,8 +33,8 @@ void sub_812B1E0(u8);
void HelpSystem_SetSomeVariable2(u8);
bool8 sub_812B40C(void);
bool8 sub_812B45C(void);
-void sub_812B478(void);
-void sub_812B484(void);
+void HelpSystem_Disable(void);
+void HelpSystem_Enable(void);
void sub_812B4B8(void);
bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
diff --git a/include/link.h b/include/link.h
index 51f103745..7c4b871de 100644
--- a/include/link.h
+++ b/include/link.h
@@ -256,5 +256,6 @@ void sub_8009FE8(void);
void ClearLinkCallback_2(void);
void sub_80FA42C(void);
void sub_800B284(struct LinkPlayer * linkPlayer);
+bool8 IsWirelessAdapterConnected(void);
#endif // GUARD_LINK_H
diff --git a/include/main_menu.h b/include/main_menu.h
index 2a0cd81d5..d8c2a5ab1 100644
--- a/include/main_menu.h
+++ b/include/main_menu.h
@@ -1,6 +1,6 @@
#ifndef GUARD_MAIN_MENU_H
#define GUARD_MAIN_MENU_H
-void sub_800C300(void);
+void CB2_InitMainMenu(void);
#endif //GUARD_MAIN_MENU_H
diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h
index c7b047f56..6fed52119 100644
--- a/include/mystery_gift_menu.h
+++ b/include/mystery_gift_menu.h
@@ -5,5 +5,6 @@ extern bool8 gGiftIsFromEReader;
void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void);
void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32);
+void c2_mystery_gift(void);
#endif //GUARD_MYSTERY_GIFT_MENU_H
diff --git a/include/quest_log.h b/include/quest_log.h
index 7e86e7c2f..8a2816c74 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -35,6 +35,7 @@ void MapNamePopupWindowIdSetDummy(void);
void sub_8111CF0(void);
void sub_811089C(void);
void sub_8113044(void);
+void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId);
extern u8 gUnknown_203ADFA;
diff --git a/include/strings.h b/include/strings.h
index 1bafbacbe..e7d40281d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -336,4 +336,94 @@ extern const u8 gText_CommErrorCheckConnections[];
extern const u8 gText_ABtnTitleScreen[];
extern const u8 gText_ABtnRegistrationCounter[];
+// main_menu
+extern const u8 gText_SaveFileCorruptedPrevWillBeLoaded[];
+extern const u8 gText_SaveFileHasBeenDeleted[];
+extern const u8 gText_1MSubCircuitBoardNotInstalled[];
+extern const u8 gText_NewGame[];
+extern const u8 gText_Continue[];
+extern const u8 gText_MysteryGift[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_WirelessAdapterIsNotConnected[];
+extern const u8 gText_MysteryGiftCantBeUsedWhileWirelessAdapterIsAttached[];
+extern const u8 gText_Player[];
+extern const u8 gText_Time[];
+extern const u8 gText_Colon[];
+extern const u8 gText_Pokedex[];
+extern const u8 gTextJPDummy_Hiki[];
+extern const u8 gText_Badges[];
+extern const u8 gTextJPDummy_Ko[];
+extern const u8 gUnknown_841B6F4[];
+
+// mystery_gift_menu
+extern const u8 gText_PickOKExit[];
+extern const u8 gText_PickOKCancel[];
+extern const u8 gText_MysteryGift2[];
+extern const u8 gJPText_MysteryGift[];
+extern const u8 gJPText_DecideStop[];
+extern const u8 gText_WhatToDoWithCards[];
+extern const u8 gText_WhatToDoWithNews[];
+extern const u8 gText_OkayToDiscardNews[];
+extern const u8 gText_IfThrowAwayCardEventWontHappen[];
+extern const u8 gText_WonderCardThrownAway[];
+extern const u8 gText_WonderNewsThrownAway[];
+extern const u8 gText_DataWillBeSaved[];
+extern const u8 gText_SaveCompletedPressA[];
+extern const u8 gText_WonderCards[];
+extern const u8 gText_WonderNews[];
+extern const u8 gText_Exit3[];
+extern const u8 gText_WirelessCommunication[];
+extern const u8 gText_Friend2[];
+extern const u8 gFameCheckerText_Cancel[];
+extern const u8 gText_Receive[];
+extern const u8 gText_Send[];
+extern const u8 gText_Toss[];
+extern const u8 gText_VarietyOfEventsImportedWireless[];
+extern const u8 gText_WonderCardsInPossession[];
+extern const u8 gText_ReadNewsThatArrived[];
+extern const u8 gText_ReturnToTitle[];
+extern const u8 gText_NothingSentOver[];
+extern const u8 gText_RecordUploadedViaWireless[];
+extern const u8 gText_WonderCardReceived[];
+extern const u8 gText_WonderCardReceivedFrom[];
+extern const u8 gText_WonderNewsReceived[];
+extern const u8 gText_WonderNewsReceivedFrom[];
+extern const u8 gText_NewStampReceived[];
+extern const u8 gText_AlreadyHadCard[];
+extern const u8 gText_AlreadyHadStamp[];
+extern const u8 gText_AlreadyHadNews[];
+extern const u8 gText_NoMoreRoomForStamps[];
+extern const u8 gText_CommunicationCanceled[];
+extern const u8 gText_CantAcceptCardFromTrainer[];
+extern const u8 gText_CantAcceptNewsFromTrainer[];
+extern const u8 gText_CommunicationError[];
+extern const u8 gText_NewTrainerReceived[];
+extern const u8 gText_WonderCardSentTo[];
+extern const u8 gText_WonderNewsSentTo[];
+extern const u8 gText_StampSentTo[];
+extern const u8 gText_OtherTrainerHasCard[];
+extern const u8 gText_OtherTrainerHasStamp[];
+extern const u8 gText_OtherTrainerHasNews[];
+extern const u8 gText_OtherTrainerCanceled[];
+extern const u8 gText_GiftSentTo[];
+extern const u8 gText_CantSendGiftToTrainer[];
+extern const u8 gText_DontHaveCardNewOneInput[];
+extern const u8 gText_DontHaveNewsNewOneInput[];
+extern const u8 gText_WhereShouldCardBeAccessed[];
+extern const u8 gText_WhereShouldNewsBeAccessed[];
+extern const u8 gText_Communicating[];
+extern const u8 gText_ThrowAwayWonderCard[];
+extern const u8 gText_HaventReceivedCardsGift[];
+extern const u8 gText_CommunicationCompleted[];
+extern const u8 gText_HaventReceivedGiftOkayToDiscard[];
+extern const u8 gText_SendingWonderCard[];
+extern const u8 gText_SendingWonderNews[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text_window_graphics.h b/include/text_window_graphics.h
index 17e919705..e2b351de9 100644
--- a/include/text_window_graphics.h
+++ b/include/text_window_graphics.h
@@ -14,6 +14,6 @@ extern const u16 gUnknown_8471DEC[][16];
extern const struct TextWindowGraphics gUserFrames[];
-const struct TextWindowGraphics * sub_8069788(u8 idx);
+const struct TextWindowGraphics * GetUserFrameGraphicsInfo(u8 idx);
#endif //GUARD_TEXT_WINDOW_GRAPHICS_H
diff --git a/ld_script.txt b/ld_script.txt
index fbf00f9c1..c9de54716 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -62,7 +62,7 @@ SECTIONS {
src/string_util.o(.text);
src/link.o(.text);
src/multiboot.o(.text);
- asm/main_menu.o(.text);
+ src/main_menu.o(.text);
src/battle_controllers.o(.text);
src/decompress.o(.text);
asm/battle_1.o(.text);
@@ -380,6 +380,7 @@ SECTIONS {
src/bg_regs.o(.rodata);
src/string_util.o(.rodata);
src/link.o(.rodata);
+ src/main_menu.o(.rodata);
data/data.o(.rodata);
src/battle_util.o(.rodata);
src/battle_script_commands.o(.rodata);
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
index f224bbc47..7c7c452f3 100644
--- a/src/berry_fix_program.c
+++ b/src/berry_fix_program.c
@@ -95,7 +95,7 @@ void mb_berry_fix_serve(void) // noreturn
ResetSpriteData();
ResetTasks();
ScanlineEffect_Stop();
- gUnknown_3005ECC = 0;
+ gHelpSystemEnabled = 0;
taskId = CreateTask(mb_berry_fix_task, 0);
gTasks[taskId].data[0] = 0;
SetMainCallback2(mb_berry_fix_maincb);
diff --git a/src/daycare.c b/src/daycare.c
index c082b4298..1690953ee 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1795,7 +1795,7 @@ void EggHatch(void)
ScriptContext2_Enable();
CreateTask(Task_EggHatch, 10);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- sub_812B478();
+ HelpSystem_Disable();
}
static void Task_EggHatch(u8 taskID)
@@ -1901,7 +1901,7 @@ static void EggHatchSetMonNickname(void)
SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
FreeMonSpritesGfx();
Free(sEggHatchData);
- sub_812B484();
+ HelpSystem_Enable();
SetMainCallback2(CB2_ReturnToField);
}
@@ -2024,7 +2024,7 @@ static void CB2_EggHatch_1(void)
UnsetBgTilemapBuffer(1);
Free(sEggHatchData);
SetMainCallback2(CB2_ReturnToField);
- sub_812B484();
+ HelpSystem_Enable();
}
break;
}
diff --git a/src/help_system.c b/src/help_system.c
index 2d96ae9d6..3ebbcb9ec 100644
--- a/src/help_system.c
+++ b/src/help_system.c
@@ -16,6 +16,8 @@
extern u8 gGlyphInfo[];
+bool8 gHelpSystemEnabled;
+
struct HelpSystemVideoState
{
/*0x00*/ MainCallback savedVblankCb;
@@ -49,15 +51,15 @@ u8 RunHelpSystemCallback(void)
{
case 0:
sInHelpSystem = 0;
- if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_NORMAL)
+ if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP)
return 0;
if (JOY_NEW(R_BUTTON) && gUnknown_203F175 == 1)
return 0;
if (JOY_NEW(L_BUTTON | R_BUTTON))
{
- if (!sub_812B45C() || !gUnknown_3005ECC)
+ if (!sub_812B45C() || !gHelpSystemEnabled)
{
- PlaySE(SE_HELP_PAGE);
+ PlaySE(SE_HELP_ERR);
return 0;
}
m4aMPlayStop(&gMPlayInfo_SE1);
diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c
index 024cfcf09..6fd069f1c 100644
--- a/src/help_system_812B1E0.c
+++ b/src/help_system_812B1E0.c
@@ -1005,16 +1005,16 @@ bool8 sub_812B45C(void)
return TRUE;
}
-void sub_812B478(void)
+void HelpSystem_Disable(void)
{
- gUnknown_3005ECC = 0;
+ gHelpSystemEnabled = 0;
}
-void sub_812B484(void)
+void HelpSystem_Enable(void)
{
if (gUnknown_203ADFA != 2 && gUnknown_203ADFA != 3)
{
- gUnknown_3005ECC = 1;
+ gHelpSystemEnabled = 1;
sub_812B4B8();
}
}
diff --git a/src/link.c b/src/link.c
index 9d67c984e..c51ec80af 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1577,7 +1577,7 @@ static void CB2_PrintErrorMessage(void)
{
if (JOY_NEW(A_BUTTON))
{
- sub_812B484();
+ HelpSystem_Enable();
PlaySE(SE_PIN);
gWirelessCommType = 0;
sLinkErrorBuffer.unk_06 = 0;
@@ -1588,7 +1588,7 @@ static void CB2_PrintErrorMessage(void)
{
if (JOY_NEW(A_BUTTON))
{
- sub_812B484();
+ HelpSystem_Enable();
rfu_REQ_stopMode();
rfu_waitREQComplete();
DoSoftReset();
diff --git a/src/main.c b/src/main.c
index 0d4e2ee1e..9294c80ce 100644
--- a/src/main.c
+++ b/src/main.c
@@ -104,7 +104,6 @@ static IntrFunc * const sTimerIntrFunc = gIntrTable + 0x7;
EWRAM_DATA u8 gDecompressionBuffer[0x4000] = {0};
EWRAM_DATA u16 gTrainerId = 0;
-extern bool8 gUnknown_3005ECC;
extern bool8 gWirelessCommType;
extern bool8 gUnknown_3005E88;
@@ -138,7 +137,7 @@ void AgbMain()
SetDefaultFontsPointer();
gSoftResetDisabled = FALSE;
- gUnknown_3005ECC = FALSE;
+ gHelpSystemEnabled = FALSE;
sub_80F50F4();
diff --git a/src/main_menu.c b/src/main_menu.c
new file mode 100644
index 000000000..4307e9696
--- /dev/null
+++ b/src/main_menu.c
@@ -0,0 +1,795 @@
+#include "global.h"
+#include "palette.h"
+#include "gpu_regs.h"
+#include "scanline_effect.h"
+#include "bg.h"
+#include "dma3.h"
+#include "task.h"
+#include "text.h"
+#include "save.h"
+#include "event_data.h"
+#include "window.h"
+#include "menu.h"
+#include "link.h"
+#include "oak_speech.h"
+#include "overworld.h"
+#include "quest_log.h"
+#include "mystery_gift_menu.h"
+#include "strings.h"
+#include "sound.h"
+#include "title_screen.h"
+#include "help_system.h"
+#include "string_util.h"
+#include "pokedex.h"
+#include "text_window.h"
+#include "text_window_graphics.h"
+#include "constants/songs.h"
+
+enum MainMenuType
+{
+ MAIN_MENU_NEWGAME = 0,
+ MAIN_MENU_CONTINUE,
+ MAIN_MENU_MYSTERYGIFT
+};
+
+enum MainMenuWindow
+{
+ MAIN_MENU_WINDOW_NEWGAME_ONLY = 0,
+ MAIN_MENU_WINDOW_CONTINUE,
+ MAIN_MENU_WINDOW_NEWGAME,
+ MAIN_MENU_WINDOW_MYSTERYGIFT,
+ MAIN_MENU_WINDOW_ERROR,
+ MAIN_MENU_WINDOW_COUNT
+};
+
+#define tMenuType data[0]
+#define tCursorPos data[1]
+
+#define tUnused8 data[8]
+#define tMGErrorMsgState data[9]
+#define tMGErrorType data[10]
+
+static bool32 MainMenuGpuInit(u8 a0);
+static void Task_SetWin0BldRegsAndCheckSaveFile(u8 taskId);
+static void PrintSaveErrorStatus(u8 taskId, const u8 *str);
+static void Task_SaveErrorStatus_RunPrinterThenWaitButton(u8 taskId);
+static void Task_SetWin0BldRegsNoSaveFileCheck(u8 taskId);
+static void Task_WaitFadeAndPrintMainMenuText(u8 taskId);
+static void Task_PrintMainMenuText(u8 taskId);
+static void Task_WaitDma3AndFadeIn(u8 taskId);
+static void Task_UpdateVisualSelection(u8 taskId);
+static void Task_HandleMenuInput(u8 taskId);
+static void Task_ExecuteMainMenuSelection(u8 taskId);
+static void Task_MysteryGiftError(u8 taskId);
+static void Task_ReturnToTileScreen(u8 taskId);
+static void MoveWindowByMenuTypeAndCursorPos(u8 menuType, u8 cursorPos);
+static bool8 HandleMenuInput(u8 taskId);
+static void PrintMessageOnWindow4(const u8 *str);
+static void PrintContinueStats(void);
+static void PrintPlayerName(void);
+static void PrintPlayTime(void);
+static void PrintDexCount(void);
+static void PrintBadgeCount(void);
+static void LoadUserFrameToBg(u8 bgId);
+static void SetStdFrame0OnBg(u8 bgId);
+static void MainMenu_DrawWindow(const struct WindowTemplate * template);
+static void MainMenu_EraseWindow(const struct WindowTemplate * template);
+
+static const u8 sString_Dummy[] = _("");
+static const u8 sString_Newline[] = _("\n");
+
+static const struct WindowTemplate sWindowTemplate[] = {
+ [MAIN_MENU_WINDOW_NEWGAME_ONLY] = {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 1,
+ .width = 24,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x001
+ },
+ [MAIN_MENU_WINDOW_CONTINUE] = {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 1,
+ .width = 24,
+ .height = 10,
+ .paletteNum = 15,
+ .baseBlock = 0x001
+ },
+ [MAIN_MENU_WINDOW_NEWGAME] = {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 13,
+ .width = 24,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x0f1
+ },
+ [MAIN_MENU_WINDOW_MYSTERYGIFT] = {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 17,
+ .width = 24,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x121
+ },
+ [MAIN_MENU_WINDOW_ERROR] = {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 15,
+ .width = 24,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x001
+ },
+ [MAIN_MENU_WINDOW_COUNT] = DUMMY_WIN_TEMPLATE
+};
+
+static const u16 sBgPal00[] = INCBIN_U16("data/main_menu/unk_8234648.gbapal");
+static const u16 sBgPal15[] = INCBIN_U16("data/main_menu/unk_8234668.gbapal");
+
+static const u8 sTextColor1[] = { 10, 11, 12 };
+
+static const u8 sTextColor2[] = { 10, 1, 12 };
+
+static const struct BgTemplate sBgTemplate[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .priority = 0
+ }
+};
+
+static const u8 sMenuCursorYMax[] = { 0, 1, 2 };
+
+static void CB2_MainMenu(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB_MainMenu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_InitMainMenu(void)
+{
+ MainMenuGpuInit(1);
+}
+
+static void CB2_InitMainMenu_2(void)
+{
+ MainMenuGpuInit(1);
+}
+
+static bool32 MainMenuGpuInit(u8 a0)
+{
+ u8 taskId;
+
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+ ScanlineEffect_Stop();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sBgTemplate, NELEMS(sBgTemplate));
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ InitWindows(sWindowTemplate);
+ DeactivateAllTextPrinters();
+ LoadPalette(sBgPal00, 0x00, 0x20);
+ LoadPalette(sBgPal15, 0xF0, 0x20);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetMainCallback2(CB2_MainMenu);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
+ taskId = CreateTask(Task_SetWin0BldRegsAndCheckSaveFile, 0);
+ gTasks[taskId].tCursorPos = 0;
+ gTasks[taskId].tUnused8 = a0;
+ return FALSE;
+}
+
+/*
+ * The entire screen is darkened slightly except at WIN0 to indicate
+ * the player cursor position.
+ */
+
+static void Task_SetWin0BldRegsAndCheckSaveFile(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0x0001);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x0021);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetGpuReg(REG_OFFSET_BLDY, 7);
+ switch (gSaveFileStatus)
+ {
+ case SAVE_STATUS_OK:
+ LoadUserFrameToBg(0);
+ if (Flag_0x839_IsSet() == TRUE)
+ {
+ gTasks[taskId].tMenuType = MAIN_MENU_MYSTERYGIFT;
+ }
+ else
+ {
+ gTasks[taskId].tMenuType = MAIN_MENU_CONTINUE;
+ }
+ gTasks[taskId].func = Task_SetWin0BldRegsNoSaveFileCheck;
+ break;
+ case SAVE_STATUS_INVALID:
+ SetStdFrame0OnBg(0);
+ gTasks[taskId].tMenuType = MAIN_MENU_NEWGAME;
+ PrintSaveErrorStatus(taskId, gText_SaveFileHasBeenDeleted);
+ break;
+ case SAVE_STATUS_ERROR:
+ SetStdFrame0OnBg(0);
+ gTasks[taskId].tMenuType = MAIN_MENU_CONTINUE;
+ PrintSaveErrorStatus(taskId, gText_SaveFileCorruptedPrevWillBeLoaded);
+ if (Flag_0x839_IsSet() == TRUE)
+ {
+ gTasks[taskId].tMenuType = MAIN_MENU_MYSTERYGIFT;
+ }
+ else
+ {
+ gTasks[taskId].tMenuType = MAIN_MENU_CONTINUE;
+ }
+ break;
+ case SAVE_STATUS_EMPTY:
+ default:
+ LoadUserFrameToBg(0);
+ gTasks[taskId].tMenuType = MAIN_MENU_NEWGAME;
+ gTasks[taskId].func = Task_SetWin0BldRegsNoSaveFileCheck;
+ break;
+ case SAVE_STATUS_NO_FLASH:
+ SetStdFrame0OnBg(0);
+ gTasks[taskId].tMenuType = MAIN_MENU_NEWGAME;
+ PrintSaveErrorStatus(taskId, gText_1MSubCircuitBoardNotInstalled);
+ break;
+ }
+ }
+}
+
+static void PrintSaveErrorStatus(u8 taskId, const u8 *str)
+{
+ PrintMessageOnWindow4(str);
+ gTasks[taskId].func = Task_SaveErrorStatus_RunPrinterThenWaitButton;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF);
+ ShowBg(0);
+ SetVBlankCallback(VBlankCB_MainMenu);
+}
+
+static void Task_SaveErrorStatus_RunPrinterThenWaitButton(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ RunTextPrinters();
+ if (!IsTextPrinterActive(MAIN_MENU_WINDOW_ERROR) && JOY_NEW(A_BUTTON))
+ {
+ ClearWindowTilemap(MAIN_MENU_WINDOW_ERROR);
+ MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
+ LoadUserFrameToBg(0);
+ if (gTasks[taskId].tMenuType == MAIN_MENU_NEWGAME)
+ gTasks[taskId].func = Task_SetWin0BldRegsNoSaveFileCheck;
+ else
+ gTasks[taskId].func = Task_PrintMainMenuText;
+ }
+ }
+}
+
+static void Task_SetWin0BldRegsNoSaveFileCheck(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0x0001);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x0021);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetGpuReg(REG_OFFSET_BLDY, 7);
+ if (gTasks[taskId].tMenuType == 0)
+ gTasks[taskId].func = Task_ExecuteMainMenuSelection;
+ else
+ gTasks[taskId].func = Task_WaitFadeAndPrintMainMenuText;
+ }
+}
+
+static void Task_WaitFadeAndPrintMainMenuText(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ Task_PrintMainMenuText(taskId);
+ }
+}
+
+static void Task_PrintMainMenuText(u8 taskId)
+{
+ u16 pal;
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0x0001);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x0021);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ SetGpuReg(REG_OFFSET_BLDY, 7);
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ pal = RGB(4, 16, 31);
+ else
+ pal = RGB(31, 3, 21);
+ LoadPalette(&pal, 0xF1, 2);
+ switch (gTasks[taskId].tMenuType)
+ {
+ case MAIN_MENU_NEWGAME:
+ default:
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME_ONLY, PIXEL_FILL(10));
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME_ONLY, 2, 2, 2, sTextColor1, -1, gText_NewGame);
+ MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME_ONLY]);
+ PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME_ONLY);
+ CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME_ONLY, 3);
+ break;
+ case MAIN_MENU_CONTINUE:
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10));
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10));
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 2, sTextColor1, -1, gText_Continue);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, 2, 2, 2, sTextColor1, -1, gText_NewGame);
+ PrintContinueStats();
+ MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]);
+ MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]);
+ PutWindowTilemap(MAIN_MENU_WINDOW_CONTINUE);
+ PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME);
+ CopyWindowToVram(MAIN_MENU_WINDOW_CONTINUE, 2);
+ CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME, 3);
+ break;
+ case MAIN_MENU_MYSTERYGIFT:
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10));
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10));
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_MYSTERYGIFT, PIXEL_FILL(10));
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 2, sTextColor1, -1, gText_Continue);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, 2, 2, 2, sTextColor1, -1, gText_NewGame);
+ gTasks[taskId].tMGErrorType = 1;
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_MYSTERYGIFT, 2, 2, 2, sTextColor1, -1, gText_MysteryGift);
+ PrintContinueStats();
+ MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]);
+ MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]);
+ MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_MYSTERYGIFT]);
+ PutWindowTilemap(MAIN_MENU_WINDOW_CONTINUE);
+ PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME);
+ PutWindowTilemap(MAIN_MENU_WINDOW_MYSTERYGIFT);
+ CopyWindowToVram(MAIN_MENU_WINDOW_CONTINUE, 2);
+ CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME, 2);
+ CopyWindowToVram(MAIN_MENU_WINDOW_MYSTERYGIFT, 3);
+ break;
+ }
+ gTasks[taskId].func = Task_WaitDma3AndFadeIn;
+}
+
+static void Task_WaitDma3AndFadeIn(u8 taskId)
+{
+ if (CheckForSpaceForDma3Request(-1) != -1)
+ {
+ gTasks[taskId].func = Task_UpdateVisualSelection;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF);
+ ShowBg(0);
+ SetVBlankCallback(VBlankCB_MainMenu);
+ }
+}
+
+static void Task_UpdateVisualSelection(u8 taskId)
+{
+ MoveWindowByMenuTypeAndCursorPos(gTasks[taskId].tMenuType, gTasks[taskId].tCursorPos);
+ gTasks[taskId].func = Task_HandleMenuInput;
+}
+
+static void Task_HandleMenuInput(u8 taskId)
+{
+ if (!gPaletteFade.active && HandleMenuInput(taskId))
+ {
+ gTasks[taskId].func = Task_UpdateVisualSelection;
+ }
+}
+
+static void Task_ExecuteMainMenuSelection(u8 taskId)
+{
+ s32 menuAction;
+ if (!gPaletteFade.active)
+ {
+ switch (gTasks[taskId].tMenuType)
+ {
+ default:
+ case MAIN_MENU_NEWGAME:
+ menuAction = MAIN_MENU_NEWGAME;
+ break;
+ case MAIN_MENU_CONTINUE:
+ switch (gTasks[taskId].tCursorPos)
+ {
+ default:
+ case 0:
+ menuAction = MAIN_MENU_CONTINUE;
+ break;
+ case 1:
+ menuAction = MAIN_MENU_NEWGAME;
+ break;
+ }
+ break;
+ case MAIN_MENU_MYSTERYGIFT:
+ switch (gTasks[taskId].tCursorPos)
+ {
+ default:
+ case 0:
+ menuAction = MAIN_MENU_CONTINUE;
+ break;
+ case 1:
+ menuAction = MAIN_MENU_NEWGAME;
+ break;
+ case 2:
+ if (!IsWirelessAdapterConnected())
+ {
+ SetStdFrame0OnBg(0);
+ gTasks[taskId].func = Task_MysteryGiftError;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ return;
+ }
+ else
+ {
+ menuAction = MAIN_MENU_MYSTERYGIFT;
+ }
+ break;
+ }
+ break;
+ }
+ switch (menuAction)
+ {
+ default:
+ case MAIN_MENU_NEWGAME:
+ gUnknown_2031DE0 = 0;
+ FreeAllWindowBuffers();
+ DestroyTask(taskId);
+ StartNewGameScene();
+ break;
+ case MAIN_MENU_CONTINUE:
+ gPlttBufferUnfaded[0] = RGB_BLACK;
+ gPlttBufferFaded[0] = RGB_BLACK;
+ gUnknown_2031DE0 = 0;
+ FreeAllWindowBuffers();
+ TrySetUpQuestLogScenes_ElseContinueFromSave(taskId);
+ break;
+ case MAIN_MENU_MYSTERYGIFT:
+ SetMainCallback2(c2_mystery_gift);
+ HelpSystem_Disable();
+ FreeAllWindowBuffers();
+ DestroyTask(taskId);
+ break;
+ }
+ }
+}
+
+static void Task_MysteryGiftError(u8 taskId)
+{
+ switch (gTasks[taskId].tMGErrorMsgState)
+ {
+ case 0:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
+ if (gTasks[taskId].tMGErrorType == 1)
+ PrintMessageOnWindow4(gText_WirelessAdapterIsNotConnected);
+ else
+ PrintMessageOnWindow4(gText_MysteryGiftCantBeUsedWhileWirelessAdapterIsAttached);
+ gTasks[taskId].tMGErrorMsgState++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ gTasks[taskId].tMGErrorMsgState++;
+ break;
+ case 2:
+ RunTextPrinters();
+ if (!IsTextPrinterActive(4))
+ gTasks[taskId].tMGErrorMsgState++;
+ break;
+ case 3:
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_ReturnToTileScreen;
+ }
+ break;
+ }
+}
+
+static void Task_ReturnToTileScreen(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_InitTitleScreen);
+ DestroyTask(taskId);
+ }
+}
+
+static void MoveWindowByMenuTypeAndCursorPos(u8 menuType, u8 cursorPos)
+{
+ u16 win0vTop, win0vBot;
+ SetGpuReg(REG_OFFSET_WIN0H, 0x12DE);
+ switch (menuType)
+ {
+ default:
+ case MAIN_MENU_NEWGAME:
+ win0vTop = 0x00 << 8;
+ win0vBot = 0x20;
+ break;
+ case MAIN_MENU_CONTINUE:
+ case MAIN_MENU_MYSTERYGIFT:
+ switch (cursorPos)
+ {
+ default:
+ case 0: // CONTINUE
+ win0vTop = 0x00 << 8;
+ win0vBot = 0x60;
+ break;
+ case 1: // NEW GAME
+ win0vTop = 0x60 << 8;
+ win0vBot = 0x80;
+ break;
+ case 2: // MYSTERY GIFT
+ win0vTop = 0x80 << 8;
+ win0vBot = 0xA0;
+ break;
+ }
+ break;
+ }
+ SetGpuReg(REG_OFFSET_WIN0V, (win0vTop + (2 << 8)) | (win0vBot - 2));
+}
+
+static bool8 HandleMenuInput(u8 taskId)
+{
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ IsWirelessAdapterConnected(); // called for its side effects only
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_ExecuteMainMenuSelection;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0xA0);
+ gTasks[taskId].func = Task_ReturnToTileScreen;
+ }
+ else if (JOY_NEW(DPAD_UP) && gTasks[taskId].tCursorPos > 0)
+ {
+ gTasks[taskId].tCursorPos--;
+ return TRUE;
+ }
+ else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].tCursorPos < sMenuCursorYMax[gTasks[taskId].tMenuType])
+ {
+ gTasks[taskId].tCursorPos++;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void PrintMessageOnWindow4(const u8 *str)
+{
+ FillWindowPixelBuffer(MAIN_MENU_WINDOW_ERROR, PIXEL_FILL(10));
+ MainMenu_DrawWindow(&sWindowTemplate[4]);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_ERROR, 2, 0, 2, sTextColor1, 2, str);
+ PutWindowTilemap(MAIN_MENU_WINDOW_ERROR);
+ CopyWindowToVram(MAIN_MENU_WINDOW_ERROR, 2);
+ SetGpuReg(REG_OFFSET_WIN0H, 0x13DD);
+ SetGpuReg(REG_OFFSET_WIN0V, 0x739D);
+}
+
+static void PrintContinueStats(void)
+{
+ PrintPlayerName();
+ PrintDexCount();
+ PrintPlayTime();
+ PrintBadgeCount();
+}
+
+static void PrintPlayerName(void)
+{
+ s32 i;
+ u8 name[OT_NAME_LENGTH + 1];
+ u8 *ptr;
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 18, sTextColor2, -1, gText_Player);
+ ptr = name;
+ for (i = 0; i < OT_NAME_LENGTH; i++)
+ *ptr++ = gSaveBlock2Ptr->playerName[i];
+ *ptr = EOS;
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 18, sTextColor2, -1, name);
+}
+
+static void PrintPlayTime(void)
+{
+ u8 strbuf[30];
+ u8 *ptr;
+
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 34, sTextColor2, -1, gText_Time);
+ ptr = ConvertIntToDecimalStringN(strbuf, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
+ *ptr++ = CHAR_COLON;
+ ConvertIntToDecimalStringN(ptr, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 34, sTextColor2, -1, strbuf);
+}
+
+static void PrintDexCount(void)
+{
+ u8 strbuf[30];
+ u8 *ptr;
+ u16 dexcount;
+ if (FlagGet(FLAG_0x829) == TRUE)
+ {
+ if (IsNationalPokedexEnabled())
+ dexcount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
+ else
+ dexcount = GetKantoPokedexCount(FLAG_GET_CAUGHT);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 50, sTextColor2, -1, gText_Pokedex);
+ ptr = ConvertIntToDecimalStringN(strbuf, dexcount, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringAppend(ptr, gTextJPDummy_Hiki);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 50, sTextColor2, -1, strbuf);
+ }
+}
+
+static void PrintBadgeCount(void)
+{
+ u8 strbuf[30];
+ u8 *ptr;
+ u32 flagId;
+ u8 nbadges = 0;
+ for (flagId = FLAG_UNK820; flagId < FLAG_UNK820 + 8; flagId++)
+ {
+ if (FlagGet(flagId))
+ nbadges++;
+ }
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 66, sTextColor2, -1, gText_Badges);
+ ptr = ConvertIntToDecimalStringN(strbuf, nbadges, STR_CONV_MODE_LEADING_ZEROS, 1);
+ StringAppend(ptr, gTextJPDummy_Ko);
+ AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 66, sTextColor2, -1, strbuf);
+}
+
+static void LoadUserFrameToBg(u8 bgId)
+{
+ LoadBgTiles(bgId, GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType)->tiles, 0x120, 0x1B1);
+ LoadPalette(GetUserFrameGraphicsInfo(gSaveBlock2Ptr->optionsWindowFrameType)->palette, 0x20, 0x20);
+ MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
+}
+
+static void SetStdFrame0OnBg(u8 bgId)
+{
+ TextWindow_SetStdFrame0_WithPal(MAIN_MENU_WINDOW_NEWGAME_ONLY, 0x1B1, 0x20);
+ MainMenu_EraseWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
+}
+
+static void MainMenu_DrawWindow(const struct WindowTemplate * windowTemplate)
+{
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B1,
+ windowTemplate->tilemapLeft - 1,
+ windowTemplate->tilemapTop - 1,
+ 1,
+ 1,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B2,
+ windowTemplate->tilemapLeft,
+ windowTemplate->tilemapTop - 1,
+ windowTemplate->width,
+ windowTemplate->height,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B3,
+ windowTemplate->tilemapLeft +
+ windowTemplate->width,
+ windowTemplate->tilemapTop - 1,
+ 1,
+ 1,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B4,
+ windowTemplate->tilemapLeft - 1,
+ windowTemplate->tilemapTop,
+ 1,
+ windowTemplate->height,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B6,
+ windowTemplate->tilemapLeft +
+ windowTemplate->width,
+ windowTemplate->tilemapTop,
+ 1,
+ windowTemplate->height,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B7,
+ windowTemplate->tilemapLeft - 1,
+ windowTemplate->tilemapTop +
+ windowTemplate->height,
+ 1,
+ 1,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B8,
+ windowTemplate->tilemapLeft,
+ windowTemplate->tilemapTop +
+ windowTemplate->height,
+ windowTemplate->width,
+ 1,
+ 2
+ );
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x1B9,
+ windowTemplate->tilemapLeft +
+ windowTemplate->width,
+ windowTemplate->tilemapTop +
+ windowTemplate->height,
+ 1,
+ 1,
+ 2
+ );
+ CopyBgTilemapBufferToVram(windowTemplate->bg);
+}
+
+static void MainMenu_EraseWindow(const struct WindowTemplate * windowTemplate)
+{
+ FillBgTilemapBufferRect(
+ windowTemplate->bg,
+ 0x000,
+ windowTemplate->tilemapLeft - 1,
+ windowTemplate->tilemapTop - 1,
+ windowTemplate->tilemapLeft +
+ windowTemplate->width + 1,
+ windowTemplate->tilemapTop +
+ windowTemplate->height + 1,
+ 2
+ );
+ CopyBgTilemapBufferToVram(windowTemplate->bg);
+}
diff --git a/src/menews_jisan.c b/src/menews_jisan.c
index 0d406e66a..2f6172bbc 100644
--- a/src/menews_jisan.c
+++ b/src/menews_jisan.c
@@ -59,7 +59,7 @@ u16 sub_8146CE8(void)
struct MysteryEventStruct *r4 = sub_8143D94();
u16 r5;
- if (!sub_806E2BC() || !ValidateReceivedWonderNews())
+ if (!Flag_0x839_IsSet() || !ValidateReceivedWonderNews())
return 0;
r5 = sub_8146E0C(r4);
diff --git a/src/mevent.c b/src/mevent.c
index af2006e14..a7115d2d4 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -475,7 +475,7 @@ void sub_8143910(u8 taskId)
data->state = 0;
break;
case 26:
- sub_812B484();
+ HelpSystem_Enable();
Free(data->t10);
DestroyTask(taskId);
SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen);
diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c
index dbc685602..9c050810e 100644
--- a/src/mystery_gift_menu.c
+++ b/src/mystery_gift_menu.c
@@ -24,6 +24,7 @@
#include "mevent_server.h"
#include "menews_jisan.h"
#include "help_system.h"
+#include "strings.h"
#include "constants/songs.h"
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
@@ -33,69 +34,6 @@ void task_add_00_mystery_gift(void);
void task00_mystery_gift(u8 taskId);
void task_add_00_ereader(void);
-extern const u8 gText_PickOKExit[];
-extern const u8 gText_PickOKCancel[];
-extern const u8 gText_MysteryGift[];
-extern const u8 gJPText_MysteryGift[];
-extern const u8 gJPText_DecideStop[];
-extern const u8 gText_WhatToDoWithCards[];
-extern const u8 gText_WhatToDoWithNews[];
-extern const u8 gText_OkayToDiscardNews[];
-extern const u8 gText_IfThrowAwayCardEventWontHappen[];
-extern const u8 gText_WonderCardThrownAway[];
-extern const u8 gText_WonderNewsThrownAway[];
-extern const u8 gText_DataWillBeSaved[];
-extern const u8 gText_SaveCompletedPressA[];
-extern const u8 gText_WonderCards[];
-extern const u8 gText_WonderNews[];
-extern const u8 gText_Exit3[];
-extern const u8 gText_WirelessCommunication[];
-extern const u8 gText_Friend2[];
-extern const u8 gFameCheckerText_Cancel[];
-extern const u8 gText_Receive[];
-extern const u8 gText_Send[];
-extern const u8 gText_Toss[];
-extern const u8 gText_VarietyOfEventsImportedWireless[];
-extern const u8 gText_WonderCardsInPossession[];
-extern const u8 gText_ReadNewsThatArrived[];
-extern const u8 gText_ReturnToTitle[];
-extern const u8 gText_NothingSentOver[];
-extern const u8 gText_RecordUploadedViaWireless[];
-extern const u8 gText_WonderCardReceived[];
-extern const u8 gText_WonderCardReceivedFrom[];
-extern const u8 gText_WonderNewsReceived[];
-extern const u8 gText_WonderNewsReceivedFrom[];
-extern const u8 gText_NewStampReceived[];
-extern const u8 gText_AlreadyHadCard[];
-extern const u8 gText_AlreadyHadStamp[];
-extern const u8 gText_AlreadyHadNews[];
-extern const u8 gText_NoMoreRoomForStamps[];
-extern const u8 gText_CommunicationCanceled[];
-extern const u8 gText_CantAcceptCardFromTrainer[];
-extern const u8 gText_CantAcceptNewsFromTrainer[];
-extern const u8 gText_CommunicationError[];
-extern const u8 gText_NewTrainerReceived[];
-extern const u8 gText_WonderCardSentTo[];
-extern const u8 gText_WonderNewsSentTo[];
-extern const u8 gText_StampSentTo[];
-extern const u8 gText_OtherTrainerHasCard[];
-extern const u8 gText_OtherTrainerHasStamp[];
-extern const u8 gText_OtherTrainerHasNews[];
-extern const u8 gText_OtherTrainerCanceled[];
-extern const u8 gText_GiftSentTo[];
-extern const u8 gText_CantSendGiftToTrainer[];
-extern const u8 gText_DontHaveCardNewOneInput[];
-extern const u8 gText_DontHaveNewsNewOneInput[];
-extern const u8 gText_WhereShouldCardBeAccessed[];
-extern const u8 gText_WhereShouldNewsBeAccessed[];
-extern const u8 gText_Communicating[];
-extern const u8 gText_ThrowAwayWonderCard[];
-extern const u8 gText_HaventReceivedCardsGift[];
-extern const u8 gText_CommunicationCompleted[];
-extern const u8 gText_HaventReceivedGiftOkayToDiscard[];
-extern const u8 gText_SendingWonderCard[];
-extern const u8 gText_SendingWonderNews[];
-
const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal");
const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz");
@@ -538,7 +476,7 @@ void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCance
if (!mg_or_ereader)
{
src = usePickOkCancel == TRUE ? gText_PickOKExit : gText_PickOKCancel;
- AddTextPrinterParameterized4(0, 2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift);
+ AddTextPrinterParameterized4(0, 2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift2);
width = 222 - GetStringWidth(0, src, 0);
AddTextPrinterParameterized4(0, 0, width, 2, 0, 0, sMG_Ereader_TextColor_1, 0, src);
}
@@ -1742,7 +1680,7 @@ void task00_mystery_gift(u8 taskId)
break;
case 37:
CloseLink();
- sub_812B484();
+ HelpSystem_Enable();
Free(data->buffer);
DestroyTask(taskId);
SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen);
diff --git a/src/new_game.c b/src/new_game.c
index 58deac9b9..efeea13cc 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -66,7 +66,7 @@ static void SetDefaultOptions(void)
gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SHIFT;
gSaveBlock2Ptr->optionsBattleSceneOff = FALSE;
gSaveBlock2Ptr->regionMapZoom = FALSE;
- gSaveBlock2Ptr->optionsButtonMode = OPTIONS_BUTTON_MODE_NORMAL;
+ gSaveBlock2Ptr->optionsButtonMode = OPTIONS_BUTTON_MODE_HELP;
}
static void ClearPokedexFlags(void)
diff --git a/src/quest_log.c b/src/quest_log.c
index 065b42cef..71cab91a1 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -93,7 +93,7 @@ static struct UnkStruct_300201C * gUnknown_300201C;
static u16 gUnknown_3002020;
EWRAM_DATA u8 gUnknown_203ADF8 = 0;
-EWRAM_DATA u8 gUnknown_203ADF9 = 0;
+static EWRAM_DATA u8 sNumScenes = 0;
EWRAM_DATA u8 gUnknown_203ADFA = 0;
EWRAM_DATA u16 gUnknown_203ADFC = 0;
EWRAM_DATA u8 gUnknown_203ADFE[3] = {0};
@@ -840,21 +840,21 @@ bool8 sub_8110E68(struct UnkStruct_203AE98 * a0)
return TRUE;
}
-void sub_8110F14(u8 taskId)
+void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId)
{
u8 i;
sub_811381C();
- gUnknown_203ADF9 = 0;
+ sNumScenes = 0;
for (i = 0; i < 4; i++)
{
if (gSaveBlock1Ptr->questLog[i].unk_000)
- gUnknown_203ADF9++;
+ sNumScenes++;
}
- if (gUnknown_203ADF9 != 0)
+ if (sNumScenes != 0)
{
- gUnknown_3005ECC = FALSE;
+ gHelpSystemEnabled = FALSE;
sub_8110F90(taskId);
DestroyTask(taskId);
}
@@ -1221,7 +1221,7 @@ void sub_8111914(void)
ScriptContext2_Enable();
if (++gUnknown_203ADF8 < 4 && gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000)
{
- gUnknown_203ADF9--;
+ sNumScenes--;
sub_8111368();
}
else
@@ -1402,7 +1402,7 @@ bool8 sub_8111CD0(void)
void sub_8111CF0(void)
{
if (gUnknown_203ADFA == 2)
- sub_8111070(gUnknown_203ADF9);
+ sub_8111070(sNumScenes);
}
void sub_8111D10(void)
@@ -1603,7 +1603,7 @@ void sub_81120AC(u8 taskId)
gTextFlags.autoScroll = FALSE;
gUnknown_2036E28 = 0;
sub_8082740(0);
- gUnknown_3005ECC = 1;
+ gHelpSystemEnabled = 1;
DestroyTask(taskId);
break;
}
diff --git a/src/seagallop.c b/src/seagallop.c
index 5374f7bac..006a356e4 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -179,7 +179,7 @@ static const struct SpriteTemplate sWakeSpriteTemplate = {
void ScrSpecial_SeaGallopFerry(void)
{
SetVBlankCallback(NULL);
- sub_812B478();
+ HelpSystem_Disable();
SetMainCallback2(CB2_SetUpSeaGallopScene);
}
@@ -306,7 +306,7 @@ static void Task_SeaGallop_2(u8 taskId)
if (sub_8055FC4() && !gPaletteFade.active)
{
Task_SeaGallop_3();
- sub_812B484();
+ HelpSystem_Enable();
DestroyTask(taskId);
}
}
diff --git a/src/text_window_graphics.c b/src/text_window_graphics.c
index e16037a34..0fb8b38f8 100644
--- a/src/text_window_graphics.c
+++ b/src/text_window_graphics.c
@@ -51,7 +51,7 @@ const struct TextWindowGraphics gUserFrames[] = {
{gUnknown_84717CC, gUnknown_8471A2C}
}; // NELEMS = 10
-const struct TextWindowGraphics * sub_8069788(u8 idx)
+const struct TextWindowGraphics * GetUserFrameGraphicsInfo(u8 idx)
{
if (idx >= 20) // if (idx >= NELEMS(gUserFrames))
return &gUserFrames[0];
diff --git a/src/title_screen.c b/src/title_screen.c
index f4086b2ff..26770b633 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -513,7 +513,7 @@ static void SetTitleScreenScene_Run(s16 * data)
CreateTask(Task_FlameOrLeafSpawner, 5);
SetGpuRegsForTitleScreenRun();
data[6] = CreateSlashSprite();
- sub_812B484();
+ HelpSystem_Enable();
data[1]++;
// fallthrough
case 1:
@@ -583,7 +583,7 @@ static void SetTitleScreenScene_Restart(s16 * data)
}
break;
case 4:
- sub_812B478();
+ HelpSystem_Disable();
DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain));
SetMainCallback2(sub_80EC864);
break;
@@ -626,7 +626,7 @@ static void SetTitleScreenScene_Cry(s16 * data)
Sav2_ClearSetDefault();
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
InitHeap(gHeap, HEAP_SIZE);
- SetMainCallback2(sub_800C300);
+ SetMainCallback2(CB2_InitMainMenu);
DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain));
}
break;
diff --git a/sym_common.txt b/sym_common.txt
index b251a32ba..0619ea728 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -220,10 +220,8 @@ gUnknown_3005E98: @ 3005E98
.include "help_system_812B1E0.o"
.align 4
.include "fame_checker.o"
-
-gUnknown_3005ECC: @ 3005ECC
- .space 0x4
-
+ .include "help_system.o"
+ .align 4
.include "mevent.o"
.align 4